/* R. J. Cano, Aug 27 2014 */

/* The same parity than x-y for x^(y+1)-y^x viewed as consequence from the definition of factorial */

s1=(x,y,omega1,omega3)->sum(kappa1=1+omega3,omega1,(kappa1!)*stirling(x,kappa1,2)*binomial(y,kappa1));
s2=(x,y,omega2,omega3)->sum(kappa2=1+omega3,omega2,(kappa2!)*stirling(y+1,kappa2,2)*binomial(x,kappa2));
s3=(x,y,omega3)->sum(kappa3=2,omega3,(kappa3!)*(stirling(y+1,kappa3,2)*binomial(x,kappa3)-stirling(x,kappa3,2)*binomial(y,kappa3)));

f0=(x,y)->{
    my(/*omega1,*/omega2,omega3);
    /*omega1=min(x,y);*/
    omega2=min(x,y+1);
    /*omega3=min(omega1,omega2);*/
    omega3=min(x,y); /* This is, omega3 == omega1 */
    /* Return this: */
    s3(x,y,omega3)+s2(x,y,omega2,omega3) /* -s1(x,y,omega1,omega3) */
}

f=(x,y)->x-y+f0(x,y);

g=(x,y)->x^(y+1)-y^x;

/* About: The ordered set made with a huge bunch of values for h(). Question: Which sequence is this? */
h=(x,y)->f0(x,y)\2; /* By definition of factorial it is ensured here to be an integer division. */

/* Simple case-by-case verification of the identity between f() and g() */
test1=z->!sum(a=2,z,sum(b=2,z,f(a,b)-g(a,b)));

/* Simple verification of the "same parity" statement between g(x,y) and x-y */
test2=z->!sum(a=2,z,sum(b=2,z,(g(a,b)%2)-((a-b)%2)));

/* =-=-=-=- APPENDIX -=-=-=-= */

view_f=(x,y)->{
    my(omega2,omega3);
    omega2=min(x,y+1);
    omega3=min(x,y);
    /* Return this: */
    [x-y,s3(x,y,omega3),s2(x,y,omega2,omega3)]
}

/*
 * Now f(x,y) can be alternatively evaluated as vecsum(view_f(x,y));
 */

tab1(z0,z)=forvec(y=vector(2,j,[z0,z]),print(f(y[1],y[2])": ("y[1]","y[2]") --> "view_f(y[1],y[2])),0); /* Incomplete? */

tab2(z0,z)=forvec(y=vector(2,j,[z0,z]),print(f(prime(y[1]),prime(y[2]))": ("prime(y[1])","prime(y[2])") --> "view_f(prime(y[1]),prime(y[2]))),0); /* Incomplete? */

/*
 * Example(s) of the usage with PARI-GP under Linux (GNU Bash interpreter). The command:
 * 
 
 echo "tab1(0,100)" | gp -q ./A240031.gp.txt | sort -g > somedatafile.txt
 
 Also:
 
 echo "tab2(2,10)" | gp -q ./A240031.gp.txt | sort -g | less
 
 * 
 * That's all for now - End.*/